package com.hivelog.ponto.domain;

import java.util.Date;

import com.hivelog.ponto.utils.PontoUtils;

public class Ponto implements Comparable<Ponto>{
	
	private Colaborador colaborador;

	private Date dia;

	private Date expedEntrada;
	private Date almocoEntrada;
	private Date outrosEntrada;
	private Date expedSaida;
	private Date almocoSaida;
	private Date outrosSaida;

	private String justificativa;

	public Ponto(Date date) {
		setDia(date);
	}
	public Ponto(Date date, Colaborador col) {
		this(date);
		setColaborador(col);
	}

	public Ponto() {
	}

	/** Retorna um inteiro que representa dia do ponto */
	public int getDiaPonto() {
		return PontoUtils.getDateDay(getDia());
	}

	public Date getDia() {
		return dia;
	}

	public void setDia(Date dia) {
		this.dia = dia;
	}

	public Date getExpedEntrada() {
		return expedEntrada;
	}

	public void setExpedEntrada(Date expedEntrada) {
		this.expedEntrada = expedEntrada;
	}

	public Date getAlmocoEntrada() {
		return almocoEntrada;
	}

	public void setAlmocoEntrada(Date almocoEntrada) {
		this.almocoEntrada = almocoEntrada;
	}

	public Date getOutrosEntrada() {
		return outrosEntrada;
	}

	public void setOutrosEntrada(Date outrosEntrada) {
		this.outrosEntrada = outrosEntrada;
	}

	public Date getExpedSaida() {
		return expedSaida;
	}

	public void setExpedSaida(Date expedSaida) {
		this.expedSaida = expedSaida;
	}

	public Date getAlmocoSaida() {
		return almocoSaida;
	}

	public void setAlmocoSaida(Date almocoSaida) {
		this.almocoSaida = almocoSaida;
	}

	public Date getOutrosSaida() {
		return outrosSaida;
	}

	public void setOutrosSaida(Date outrosSaida) {
		this.outrosSaida = outrosSaida;
	}

	public boolean isPontoCorreto() {

		boolean entradaOK = true;
		boolean almocoOk = true;
		boolean outrosOk = true;
		boolean somaOk = true;

		if ((expedEntrada != null && expedSaida != null)
				|| (expedEntrada == null && expedSaida == null)) {
			entradaOK = true;
		} else {
			entradaOK = false;
		}

		if ((almocoEntrada != null && almocoSaida != null)
				|| (almocoEntrada == null && almocoSaida == null)) {
			almocoOk = true;
		} else {
			almocoOk = false;
		}

		if ((outrosEntrada != null && outrosSaida != null)
				|| (outrosEntrada == null && outrosSaida == null)) {
			outrosOk = true;
		} else {
			outrosOk = false;
		}
		
		if (PontoUtils.calcularPontoDia(this)>0) {
			somaOk = true;
		} else {
			somaOk = false;
		}

		return entradaOK && almocoOk && outrosOk && somaOk;
	}

	public String getJustificativa() {
		return justificativa;
	}

	public void setJustificativa(String justificativa) {
		this.justificativa = justificativa;
	}

	public void addJustificativa(String just) {

		if (just == null || just.equals("")) {
		} else if (justificativa == null || justificativa.equals("")) {
			setJustificativa(just);
		} else {

			this.justificativa += " - " + just;
		}
	}

	@Override
	public int compareTo(Ponto o) {
		
		if (o == null || o.getDia()==null) {
			return -1;
		}
		
		return dia.compareTo(o.getDia());
	}

	public Colaborador getColaborador() {
		return colaborador;
	}

	public void setColaborador(Colaborador colaborador) {
		this.colaborador = colaborador;
	}

}
